home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vubstd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  7KB  |  158 lines

  1. /*  VUBstd.h
  2.  
  3.   vector management functions for data type "unsigned char".
  4.  
  5.   Copyright (c) 1996-1999 by Martin Sander
  6.   All Rights Reserved.
  7. */
  8.  
  9. #ifndef __VUBSTD_H
  10. #define __VUBSTD_H
  11.  
  12. #if !defined( __VECLIB_H )
  13.    #include <VecLib.h>
  14. #endif
  15.  
  16. #ifdef __cplusplus
  17.    extern "C" {
  18. #endif
  19.  
  20. /**********************  Generation *************************************/
  21.  
  22. ubVector  __vf  VUB_vector( ui size );
  23. ubVector  __vf  VUB_vector0( ui size );
  24.  
  25. /***************  Addressing single vector elements ******************/
  26.  
  27. unsigned char _VFAR * VUB_Pelement( ubVector X, ui n );
  28.       /* returns a pointer to the n'th element of X. For the memory model
  29.          HUGE, the pointer is normalized. */
  30. #define VUB_element( X, n )  (*VUB_Pelement( X, n ))
  31.  
  32. /****************** Initialization  ******************************/
  33.  
  34. void  __vf  VUB_equ0( ubVector X, ui size );
  35. void  __vf  VUB_equC( ubVector X, ui size, unsigned char C );
  36. void  __vf  VUB_equV( ubVector Y, ubVector X, ui size );
  37. void  __vf  VUB_ramp( ubVector X, ui size, unsigned char Start, char Rise );
  38. long  __vf  VUB_random( ubVector X, ui size, long seed,
  39.                         unsigned char MinVal, unsigned char MaxVal );
  40.                               /*  returns new seed */
  41.  
  42.  
  43. /**************  Data-type interconversions  **************************/
  44.  
  45. void __vf  V_BItoUB( ubVector Y, biVector X, ui size );  /* signed-unsigned */
  46. void __vf  V_UBtoBI( biVector Y, ubVector X, ui size );
  47.  
  48. void __vf  V_UBtoU(  uVector  Y, ubVector X, ui size );  /* up-conversion */
  49. void __vf  V_UBtoUS( usVector Y, ubVector X, ui size );
  50. void __vf  V_UBtoUL( ulVector Y, ubVector X, ui size );
  51.  
  52. void  __vf   V_UStoUB( ubVector Y, usVector X, ui size );/* down-conversion */
  53. void  __vf   V_UtoUB(  ubVector Y, uVector  X, ui size );
  54. void  __vf   V_ULtoUB( ubVector Y, ulVector X, ui size );
  55.  
  56. void  __vf   V_UBtoF(  fVector Y, ubVector X, ui size );
  57. void  __vf   V_UBtoD(  dVector Y, ubVector X, ui size );
  58. #ifdef __BORLANDC__
  59.     void  __vf   V_UBtoE(  eVector Y, ubVector X, ui size );
  60. #else  /* no 80-bit IEEE reals with Visual C++ and Optima++ */
  61.     #define V_UBtoE V_UBtoD
  62. #endif
  63.  
  64.  
  65. /************** Index-oriented manipulations ***************************/
  66.  
  67. void  __vf  VUB_rev( ubVector Y, ubVector X, ui size );
  68. #ifdef V_HUGE
  69.     void  __vf  VUB_rotate( ubVector Y, ubVector X, ui size, long pos );
  70. #else
  71.     void  __vf  VUB_rotate( ubVector Y, ubVector X, ui size, int pos );
  72. #endif
  73.  
  74. void  __vf  VUB_delete( ubVector X, ui size, ui pos );
  75. void  __vf  VUB_insert( ubVector X, ui size, ui pos, unsigned char C );
  76.  
  77. void  __vf  VUB_sort( ubVector Y, ubVector X, ui size, int dir );
  78. void  __vf  VUB_sortind( uiVector Ind, ubVector X, ui size, int dir );
  79.  
  80. void  __vf  VUB_subvector( ubVector Y, ui sizey, ubVector X, int samp );
  81. void  __vf  VUB_subvector_equC( ubVector Y, ui subsz, unsigned samp,
  82.                                 unsigned char C );
  83. void  __vf  VUB_subvector_equV( ubVector Y, ui subsz, unsigned samp,
  84.                                 ubVector X );
  85.  
  86. void  __vf  VUB_indpick( ubVector Y, uiVector Ind, ui sizey, ubVector X );
  87. void  __vf  VUB_indput(  ubVector Y, ubVector X, uiVector Ind, ui sizex );
  88.  
  89. ui    __vf  VUB_searchC( ubVector XTab, ui size, unsigned char C, int mode );
  90. void  __vf  VUB_searchV( uiVector Ind, ubVector X, ui sizex,
  91.                          ubVector Tab, ui sizetab, int mode );
  92.  
  93. /********************   One-dimensional Vector Operations  ********/
  94.  
  95. unsigned char  __vf  VUB_sum( ubVector X, ui size );
  96. void           __vf  VUB_runsum( ubVector Y, ubVector X, ui size );
  97. unsigned char  __vf  VUB_max( ubVector X, ui size );
  98. unsigned char  __vf  VUB_min( ubVector X, ui size );
  99. unsigned char  __vf  VUB_maxind( ui _VFAR *Ind, ubVector X, ui size );
  100. unsigned char  __vf  VUB_minind( ui _VFAR *Ind, ubVector X, ui size );
  101. double         __vf  VUB_mean( ubVector X, ui size );
  102. void           __vf  VUB_runmax( ubVector Y, ubVector X, ui size );
  103. void           __vf  VUB_runmin( ubVector Y, ubVector X, ui size );
  104.  
  105. int    __vf  VUB_iselementC( ubVector Tab, ui size, unsigned char C );
  106. ui     __vf  VUB_iselementV( ubVector Y, ubVector X, ui sizex,
  107.                              ubVector Tab, ui sizetab );
  108.  
  109.  
  110. /************************ Input / Output ******************************/
  111.  
  112. void  __vf   V_ifprint(  FILE _VFAR *stream, void _VFAR *X, ui size,
  113.                   unsigned nperline, unsigned linewidth, unsigned vers );
  114. #define VUB_fprint( st, x, sz, npl, lw ) \
  115.              V_ifprint(  st, (void _VFAR *)(x), sz, npl, lw, 1 )
  116.  
  117. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  118.     void __vf  V_icprint(  void _VFAR *X, ui size, unsigned nperline, unsigned vers );
  119.     #define VUB_cprint( x, sz, npl ) V_icprint( (void _VFAR *) (x), sz, npl, 1 )
  120. #endif
  121. #define VUB_print( x, sz, npl ) \
  122.              V_ifprint(  stdout, (void _VFAR *)(x), sz, npl, 80, 1 )
  123.  
  124. void  __vf   V_setRadix( int radix );
  125.            /* radix to be assumed by all whole-number read functions V??_read */
  126. void  __vf   VUB_read( ubVector X, ui size, FILE _VFAR *stream );
  127. void  __vf   VUB_write( FILE _VFAR *stream, ubVector X, ui size );
  128. void  __vf   VUB_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  129. void  __vf   VUB_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  130. void  __vf   VUB_setWriteFormat( char _VFAR *FormatString );
  131.   /* for VUB_write and VUB_nwrite. The format must be a format for unsigned short ! */
  132. void  __vf   VUB_setWriteSeparate( char _VFAR *SepString ); /* for VUB_write */
  133. void  __vf   VUB_setNWriteSeparate( char _VFAR *SepString ); /* for VUB_nwrite */
  134. #ifdef V_HUGE
  135.     void  __vf   VUB_store(  FILE _VFAR *stream, ubVector X, ui size );
  136.     void  __vf   VUB_recall( ubVector X, ui size, FILE _VFAR *stream );
  137. #else
  138.     #ifdef __cplusplus
  139.          void  inline VUB_store( FILE _VFAR *stream, ubVector X, ui size )
  140.          {    fwrite( X, sizeof(unsigned char), size, stream );
  141.          }
  142.          void  inline VUB_recall( ubVector X, ui size, FILE _VFAR *stream )
  143.          {    fread(  X, sizeof(unsigned char), size, stream );
  144.          }
  145.     #else
  146.         #define VUB_store( str, X, sz )  \
  147.                      fwrite( X, sizeof(unsigned char), sz, str )
  148.         #define VUB_recall( X, sz, str ) \
  149.                      fread(  X, sizeof(unsigned char), sz, str )
  150.     #endif
  151. #endif      /* VUB_store, VUB_recall in binary format */
  152.  
  153. #ifdef __cplusplus
  154. }
  155. #endif
  156.  
  157. #endif   /*  __VUBSTD_H    */
  158.